﻿using System;
using System.Collections.Generic;
using System.Drawing;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Data;
using System.Windows.Media.Imaging;
using Clipboard.Model;
using Clipboard.Tools.FileIcon;

namespace Clipboard.Tools
{
    public class FilePathToNameAndIconConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {

            if (value is  ClipboardRecord record)
            {

                var filePaths= record.FilePath?.Split(';');
                var fileSuffix = record.FileType?.Split(';');

                var files =new List<FileItem>();
                Icon folderIcon = null;
                //图标
                // 遍历每个文件路径
                for (int i = 0; i < filePaths?.Length; i++)
                {
                    var path = filePaths[i];
                    var suffix = fileSuffix?[i];
                    var file= new FileItem();

                    //文件名
                    if (string.IsNullOrEmpty(suffix))
                    {
                        // 如果是文件夹，获取文件夹名
                        file.FileName = new DirectoryInfo(path).Name; // 目录名
                    }
                    else
                    {
                        // 如果是文件，获取文件名
                        file.FileName = (System.IO.Path.GetFileName(path)); // 文件名
                       
                    }

                    //图标
                    // 根据文件后缀名设置图标
                    folderIcon = FileIconHelper.GetFileOrFolderIcon(path);
                    // 如果需要使用图标，可以将其转换为图片
                    //注意  拿到Icon之后要先toBitmap然后再save到memorystream中，不然ms写入到BitmapImage中是16色的  
                    file.Icon = ConvertIconToBitmapSource(folderIcon);
                    file.Pathstr = path;



                    files.Add(file);

                }





                return files;
            }
            return new FileItem();
        }

        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            // 不需要反向转换
            throw new NotImplementedException();
        }

        public class FileItem
        {
            public string FileName { get; set; }
            public BitmapSource Icon { get; set; } // 图标的具体类型取决于您的应用
            public string Pathstr { get; set; }
        }


        // 将 Icon 转换为 BitmapSource
        public static BitmapSource ConvertIconToBitmapSource(Icon icon)
        {
            // 将 Icon 转换为 Bitmap
            using (Bitmap bitmap = icon.ToBitmap())
            {
                // 将 Bitmap 转换为 BitmapSource
                using (MemoryStream memoryStream = new MemoryStream())
                {
                    // 将 Bitmap 保存到内存流中
                    bitmap.Save(memoryStream, System.Drawing.Imaging.ImageFormat.Png);
                    memoryStream.Seek(0, SeekOrigin.Begin);

                    // 使用 BitmapImage 加载内存流中的图像
                    var bitmapSource = new BitmapImage();
                    bitmapSource.BeginInit();
                    bitmapSource.StreamSource = memoryStream;
                    bitmapSource.CacheOption = BitmapCacheOption.OnLoad;
                    bitmapSource.EndInit();

                    return bitmapSource;
                }
            }
        }
    }
}
